% TAB M
RFIL=176730; PFIL=176731; DFIL=176732; MFIL=176733; IFIL=176734
RBLK=170000; PBLK=171000; DBLK=172000; MBLK=173000; IBLK=174000
XPBLK=175000
CPLR=176735; PORT=176736; MESAD=176737; SPILL=177000; TTY=176744
TSAVE=176740; QSAVE=176741; ZSAVE=176742; XSAVE=176743; L2INT=176745
26000/
RDROM, STA   BLOCK
       COPY  ST DA           % KOLLA OM AREAN SKALL RESERVERAS
       JAZ   RDR             % NIX
       LDA   (RDRP           % RESRV
       MON   122
RDR,   LDT I (RFIL           % FIL#
       LDX   (RBLK           % BUF
       JMP   LL
RDATA, STZ   BLOCK
       COPY  ST DA           % KOLLA OM AREAN SKALL RESERVERAS
       JAZ   RDA             % NIX
       LDA   (RDAP           % RESRV
       MON   122
RDA,   LDT I (DFIL           % FIL#
       LDX   (DBLK           % BUF
       JMP   LL
RDPLR, STA   BLOCK
       COPY  ST DA
       JAZ   RDP
       LDA   (RDP
       MON   122             % RESRV
RDP,   LDT I (PFIL
       LDX   (PBLK
LL,    LDA   BLOCK
       MON   7
       MON   64
       EXIT
WTROM, STA   BLOCK
       LDA   (RDRP
       MON   123             % RELES
       LDT I (RFIL
       LDX   (RBLK
       JMP   WW
WDATA, STZ   BLOCK
       LDA   (RDAP
       MON   123             % RELES
       LDT I (DFIL
       LDX   (DBLK
       JMP   WW
WTPLR, STA   BLOCK
       LDA   (RDPP
       MON   123             % RELES
       LDT I (PFIL
       LDX   (PBLK
WW,    LDA   BLOCK
       MON   10
       MON   64
       EXIT
BLOCK, 0
RLINE, LDT I (MFIL
       LDX   (MBLK
       JMP   LL1
WLINE, LDT I (MFIL
       LDX   (MBLK
       JMP   WW1
RITEM, LDT I (IFIL
       LDX   (IBLK
LL1,   MON   7
       MON   64
       EXIT
WITEM, LDT I (IFIL
       LDX   (IBLK
WW1,   MON   10
       MON   64
       EXIT
&
REST,  LDX   (LF
       MON   32
       SAA   0
       MON   3
       EXIT
&
RDRP,  (11; (0; (0
RDPP,  (45; (0; (0
RDAP,  (201; (0; (0
PAR,   (10; (1
BSTP,  4040; 4047
QM,    '$?'
RETUR, 0
BUF,   0
DEV,   0
NUM,   0
INBAZ, STT   DEV             % BAZE
       SAT   1
       STT   BUF
       STZ   NUM
       COPY  SL DX
       STX   RETUR
X1,    LDT   (SPILL
       LDX   (QM
       JPL I (INPUT
       STX I (XSAVE
CALC,  JXZ   IEND
X2,    AAX   -1
       LDT   (SPILL
       LBYT
       AAA   -60
       JAN   IERR
       SUB   DEV
       JAP   IERR
       ADD   DEV
       MPY   BUF
       ADD   NUM
       STA   NUM
       LDA   BUF
       MPY   DEV
       STA   BUF
       JXZ   IEND
       JMP   X2
IEND,  LDA   NUM
QWEDS, LDX I (XSAVE
       LDT   RETUR
       COPY  ST DP
IERR,  SAA   0
       JMP   QWEDS
&
STR1,  0
STR2,  0
LIKA,  0
CHAR,  0
CMPST, STA   STR1
       AND   (37
       STX   STR2
       STX   LIKA
       SAX   0
LP,    LDT   STR1
       LBYT
       STA   CHAR
       LDT   STR2
       LBYT
       SUB   CHAR
       AND   (37
       JAZ   NXT
       STZ   LIKA
       JMP   L2
NXT,   LDT   STR1
       LBYT
       AAX   1
       SUB   (47
       JAF   LP
L2,    LDA   LIKA
       EXIT
MOVST, STA   STR1
       STX   STR2
       SAX   0
LZ,    LDT   STR1
       LBYT
       LDT   STR2
       SBYT
       AAX   1
       SUB   (47
       JAF   LZ
       EXIT
&
COUNT, 0
ADDPL, LDX   (RBLK+325       % ADDERA SPELARE T TILL RUM
       MIN I (RBLK+261
       SAA   40              % MAX 32 SPELARE
       STA   COUNT
LOOP1, LDA   ,X
       JAZ   OK1
       AAX   1
       LDA   COUNT
       AAA   -1
       STA   COUNT
       JAZ   DNE
       JMP   LOOP1
OK1,   STT   ,X
DNE,   EXIT
AD,    0; 0                  % EXTRA NOLLA TAS BORT N[R JAG ORKAR...
REMPL, STT   AD              % TA BORT SPELARE T FR]N RUM
       SAA   40              % MAX 32 SPELARE I ETT RUM
       STA   COUNT
       LDX   (RBLK+325       % PL BUFF
LOOP2, LDA   ,X              % PL # I BUFF
       AND   (377
       SUB   AD              % - CPLR ELLER SPELARE SOM SKA AVL[GSNAS
       JAF   OK2             % INTE SAMMA
                             % TA BORT SPELAREN
       LDA I (RBLK+261       % ANTAL SPELARE I RUMMET
       AAA   -1              % - 1
       STA I (RBLK+261
       STZ   ,X
OK2,   AAX   1
       LDA   COUNT
       AAA   -1
       STA   COUNT
       JAF   LOOP2
       EXIT
&
LEN,   0
R,     0
S,     0
LDIR,  STT   LEN
       STA   S
       STX   R
LZP,   LDX   S
       LDA   ,X
       LDX   R
       STA   ,X
       MIN   S
       MIN   R
       LDA   LEN
       AAA   -1
       STA   LEN
       JAF   LZP
       EXIT
&
HBUF,  0; 0; 0; 0
                             % PARAMETRAR TILL AHAPP, RHAPP:
                             % A - ACTION, T - D1, X - D2
PLAYER,0                     % EVENTUELLT D - ROOM (RHAPP)
AHAPP, STZ   R               % ROOM = 0
       STA   HBUF            % ACTION
       JMP   HP1
RHAPP, STA   HBUF            % ACTION
       COPY  SD DA           % ROOM
       STA   R               % SPARA ROOM
HP1,   STT   HBUF+2          % PARAMETER 1
       STX   HBUF+3          % PARAMETER 2
       COPY  SL DX
       STX   HRET
       LDA I (CPLR
       STA   HBUF+1          % SKICKANDE SPELAREN
       SAT   0
       JPL I (RDATA          % L[S IN MAGIC NUMBER LIST
       LDA   R
       JAZ   AHP             % ROOM 0: TILL AHAPP
       SAT   0               % DETTA [R RHAPP:
       JPL I (RDROM          % L[S IN RBLK
       LDA I (RBLK+261       % ANTAL SPELARE
       JAZ   HEND            % ANTAL SPELARE = 0 (MED CPLR) VANLIGT FEL
       AAA   -1              % DRA FR]N CPLR
       JAZ   HEND            % INGEN SPELARE ATT HAPPA TILL
       STA   HANTAL          % ANTAL SPELARE
       LDX   (RBLK+325       % PLBUFF I RBLK
       STX   HADDR
HP2,   LDX   HADDR
       LDA   ,X
       JAZ   RHNXT           % INGEN SPELARE
       AND   (377
       SUB I (CPLR
       JAZ   RHNXT           % CPLR
       LDA   ,X
       SHA   ZIN SHR 10      % 0 F\R ATT SLIPPA [NDRA ADDR I C-MAIN, FIXA!
       JAZ   RHN             % SOVER - PORT# = 0, MEN SPELARE [NDOCK, JU
       LDX   HADDR
       LDA   ,X              % OBEHANDLAT PORT# FR]N PLAYERBUFF
       SHA   ZIN SHR 10      % PORT#
       AAA   -1              % - 1
       SHA   ZIN 1           % * 2
       ADD   (DBLK+10        % I DBLK P] R[TT ST[LLE
       COPY  SA DX           % X - ADDR TILL SPELARENS MAG NO
       JPL   SEND
RHN,   LDA   HANTAL
       AAA   -1
       STA   HANTAL
RHNXT, MIN   HADDR
       LDA   HANTAL
       JAF   HP2
HEND,  LDA   HRET
       COPY  SA DP
&
HANTAL,0
HADDR, 0
HRET,  0
MNAD,  0
AHP,   LDX   (DBLK+10        % START P] MAG NO-LISTAN
       STX   HADDR
       SAA   40              % 32 PORTAR
       STA   HANTAL
HP3,   LDX   HADDR
       COPY  SX DA
       SUB   (DBLK+10
       SHA   ZIN SHR 1
       AAA   1
       SUB I (PORT
       JAZ   AHNXT           % MIN PORT
       LDD   ,X
       JAZ   AHNXT           % INGET MAG NO
       LDX   HADDR
       JPL   SEND            % D[R X PEKAR P] MAGNO
AHNXT, MIN   HADDR
       MIN   HADDR
       LDA   HANTAL
       AAA   -1
       STA   HANTAL
       JAF   HP3             % FLER
       JMP   HEND
SEND,  STX   MNAD            % ADDRESS TILL MAGIC NUMBER
       SAT   2               % XFGET
       SAA   10              % 8 BYTES
       MON   200
       SKP   DT GRE
       JPL I (XERR
       SAT   7               % XFWRI
       SAA   10              % NO OF BYTES
       COPY  SA DD
       LDA   (HBUF           % HAPP
       SAX   0               % DISPLACEMENT
       MON   200             % XMSG CALL
       SKP   DT GRE
       JPL I (XERR
       SAT   14              % XFSND
       LDX   MNAD            % PEKAREN I MAG NO-LISTAN
       LDD   ,X              % AD - MAGNO
       LDX I (PORT           % S[NDANDE PORT
       MON   200             % SKICKA MESSAGE
       SKP   DT GRE
       JPL I (XERR
       EXIT
&
LF,    '$'
DRT2,  '>Du sl{pper '
DRT3,  '.$'
RETT,  0
DROPL, COPY  SL DX
       STX   RETT
       STA I (QSAVE          % SL[PP SPELARE #A
       STZ I (PBLK+76
       LDA I (CPLR
       JPL I (WTPLR          % SKRIV TILLBAKA SL[PPANDE SPELAREN
       LDA I (PBLK+74        % RUM #
       SAT   1
       JPL I (RDROM
       LDT I (QSAVE          % SL[PPTA SPELAREN
       JPL I (ADDPL          % L[GG TILL SPELAREN
       LDA I (PBLK+74
       JPL I (WTROM          % SKRIV TILLBAKA RUM
       LDA I (PBLK+74        % RUM #
       STA I (TSAVE
       LDA I (QSAVE          % L[S IN SL[PPTA SPELAREN
       SAT   1
       JPL I (RDPLR
       LDA I (TSAVE          % NYA RUMMET
       STA I (PBLK+74
       LDA I (QSAVE          % SPARA
       JPL I (WTPLR
       LDX   (DRT2
       MON   32
       LDX   (PBLK
       MON   32
       LDX   (DRT3
       MON   32
       LDA   RETT
       COPY  SA DP
&
PSW,   0
PSWIN, SAA   0
       MON   4
       SAA   -1
       MON   3               % ECHOM, NO ECHO
       SAA   1
LPD,   STA   PSW
       SAT   1
       MON   1
       MON   65
       AND   (177
       AAA   -15
       JAZ   OUTT
       AAA   15
       ORA   (340
       MPY   PSW
       SHA   ROT 2
       JMP   LPD
OUTT,  SAA   0
       MON   3
       LDA   PSW
       LDX   (LF
       MON   32
       EXIT
&
CLINE, LDA I (TTY
       LDX   (TVCLR
       AAA   -4
       JAZ   CLRS            % VISUAL
       LDX   (TTCLR
CLRS,  MON   32
       EXIT
TTCLR, 2047
TVCLR, 15513; 23400
&
ADDL,  RADD  ST DA           % AD = AD + TX
       RADD  SX DD ADC       % A & T - LSW, D & X - MSW
       EXIT
SUBL,  SKP   IF ST GRE DA
       RINC  DX
       RSUB  ST DA           % A = A - T
       RSUB  SX DD           % D = D - X
       EXIT
&
TAB,   [0
TLEN,  0
PRIDE, STA   REGA
       COPY  SD DA
       STA   REGD
       STX   TLEN
       JAZ   XS31            % AD ETT TAL MELLAN 0 - 65535
       LDF   (0
XS2,   FAD   (65536
       LDX   REGD
       AAX   -1
       STX   REGD
       JXZ   XS3
       JMP   XS2
XS31,  LDF   (0
XS3,   STF   TW
       LDA   REGA
       NLZ+20
       FAD   TW
       LDX   TLEN
PRIFP, STX   TLEN            % SKRIV UT ETT FP#
       STF   TW              % FP#
       LDX   TLEN            % BER[KNA F\RSTA I TAB
       LDF   (1
LPPP,  AAX   -1
       JXZ   LPP1
       FMU   (10
       JMP   LPPP
LPP1,  STF   TAB
       LDX   TLEN
       JMP   XS
TW,    0; 0; 0
TW2,   0; 0; 0
REGA,  0
REGD,  0
XS,    LDF   TW
       FDV   TAB
       DNZ-20
       AAA   60
       SAT   1
       MON   2               % SKRIV UT SIFFRA
       MON   65
       AAA   -60
CT,    NLZ+20
       FMU   TAB
       STF   TW2
       LDF   TW
       FSB   TW2
       STF   TW
       LDF   TAB
       FDV   (10
       STF   TAB
       AAX   -1
       JXZ   XEND
       JMP   XS
XEND,  EXIT
&
T1,    '$*- XMSG error code:'
T2,    '$XROUT fatal error:'
HDPAR, (1; (4
XMERR, SKP   DT LST
       EXIT
XERR,  COPY  ST DA
       LDX   (T1
ERR,   SAT   12
       MON   32
       MON   35
       MON   0
&
IRET,  0
UADD,  502; 10; 177406; 25130; 41517
ZZ,    'VA'
XINIT, COPY  SL DX
       STX   IRET
       SAT   12              % XFOPN
       MON   200
       JPL I (XMERR
       STA I (PORT
       SAT   2               % XFGET
       SAA   100
       MON   200
       JPL I (XMERR
       STA I (MESAD
NAME,  SAT   7               % XFWRI
       SAA   14
       COPY  SA DD
       LDA   (UADD
       SAX   0
       MON   200
       JPL I (XMERR
       LDT   (2000           % XFROU
       AAT   14              % XFSND
       LDX I (PORT
       SAA   0
       COPY  SA DD
       MON   200
       JPL I (XMERR
LOOP,  LDT   (100015         % XFRCV BONE XFWTF
       LDA I (PORT
       MON   200
       JPL I (XMERR
       COPY  SD DA           % MESAD
       STA I (MESAD
       COPY  ST DA           % MESSAGE TYPE
       JAZ   LOOP            % MESSAGE TYPE = 0, ?NO MESSAGE
READ,  SAT   6               % XFREA
       COPY  SX DD
       LDA   (UBUF
       SAX   0
       MON   200
       JPL I (XMERR
       LDA I (UBUF           % BYTE 0 & 1
       AND   (377            % ERRCODE IF T <> 0
       JAZ   END             % OK
       AAA   -3              % ANOTHER PORT ALREADY HAS THIS NAME
       JAZ   NYNAM           % ERROR 3 V[NTAT
       LDX   (T2             % XROUT FATAL ERROR
       JMP I (ERR
NYNAM, MIN   ZZ              % \KA SISTA BOKSTAVEN I NAMNET
       JMP   NAME            % TESTA NYTT NAMN
END,   SAT   3               % XFREL
       LDA I (MESAD
       MON   200
       JPL I (XMERR
       SAT   27              % XFP2M
       LDA I (PORT
       MON   200
       JPL I (XMERR
       LDA I (IRET           % RET ADD
       COPY  SA DP
&
COMP,  STA I (STR1
       STX I (STR2
       STZ I (LIKA
       SAX   0
LOP,   LDT I (STR1
       LBYT
       STA I (CHAR
       AAA   -47
       JAZ   OKCMP
       LDT I (STR2
       LBYT
       SUB I (CHAR
       AND   (37
       JAF   IND
       AAX   1
       JMP   LOP
OKCMP, STT I (LIKA
IND,   LDA I (LIKA
       EXIT
&
TGN1,  'Tvetydigt namn, f|rs|k igen!$'
TGN2,  'Namnet finns inte.$'
HITT,  0
GRET,  0
GETNA, COPY  SL DX
       STX   GRET
       LDA I (CPLR           % L[S IN PBLK F\R ATT H[MTA RUMSNUMRET
       SAT   0
       JPL I (RDPLR
       LDA I (PBLK+74        % RUMS#
       SAT   0
       JPL I (RDROM          % # RDROM
       LDA I (RBLK+261       % ANTAL SPELARE
       STA I (ANTAL          % SPARA ANTAL SPELARE I RPLBUFF
       LDX   (RBLK+325       % RPLBUFF
       STX I (ADDR           % ADDRESS TILL RPLBUFF
       STZ   HITT            % NOLLST[LL ANTAL HITTADE SPELARE
       SAT   0
       JPL I (RDATA          % # RDATA
GETLP, LDX I (ADDR
       LDA   ,X              % SPELAR#
       AND   (377            % SKIPPA PORT#
       JAZ   GNEXT           % INGEN SPELARE
       SUB I (CPLR           % KOLLA OM = CPLR
       JAZ   GNXT            % = CPLR, INTE HITTA SIG SJ[LV, VA?
       LDA   ,X              % H[MTA SPELAR# P] NYTT
       AND   (377            % OCH SKIPPA PORT#
       MPY   (20
       ADD   (100000
       COPY  SA DX
       LDA   (SPILL
       JPL I (COMP           % J[MF\R MED ZPEC COMPARE
       JAZ   GNXT            % INTE HITTAT NAMN
       MIN   HITT            % \KA ANTAL HITTADE NAMN
       LDX I (ADDR
       LDA   ,X
       AND   (377
       STA I (ZSAVE          % ZSAVE = SIST HITTADE SPELARE
GNXT,  LDA I (ANTAL          % MINSKA ANTAL S\KTA NAMN KVAR
       AAA   -1
       STA I (ANTAL
GNEXT, LDA I (ANTAL
       MIN I (ADDR
       JAF   GETLP
       LDA   HITT
       JAZ   NFIND           % INTE HITTAT N]GOT NAMN
       AAA   -1
       JAZ   GOK             % HITTAT NAMN, MEN BARA ETT
       LDX   (TGN1           % TVETYDIGT NAMN
GPRUT, STZ I (ZSAVE
       MON   32
GOK,   LDA I (ZSAVE          % A = 0, INGET HITTAT NAMN, <> 0 HITTAT SPELAR#
       LDX   GRET
       COPY  SX DP
NFIND, LDX   (TGN2           % INTE HITTAT N]N NAMN
       JMP   GPRUT
&
RELES, LDA   (RDRP
       MON   123
       LDA   (RDPP
       MON   123
       LDA   (RDAP
       MON   123
       EXIT
&
TNOPAR,(0; (0; (1            % PARAMETRAR TILL TNOWAI
TNPAR2,(0; (0; (0
WTPAR, (2; (4                % PAUS TV] TIMMAR
TEBAK, 0
CPOS,  0
IBUF,  0
PR,    0
CONT,  LDX   CPOS            % S[TT EN ' I SLUTET AV INMATAD RAD
       LDT   IBUF
       SAA   47
       SBYT                  % EN '
       JPL I (RELES          % RELEASE DEVICE 128
       LDX   PR              % GAMLA PROMPTEN
       MON   32
       LDX   IBUF            % SKRIVET HITTILLS
       MON   32
       JMP   ILOP1
INPUT, STT   IBUF            % T=BUFFER ADDRESS, OBS!
       STX   PR              % PROMPT ADDRESS
       COPY  SL DX
       STX   TEBAK           % RETAD
       JPL I (RELES          % RELES DEVICE
ISTUP, SAX   0
       STX   CPOS            % NOLLST[LL ANTALET TECKEN I BUFFEN
       SAA   -1              % ECHOM, NO ECHO
       MON   3
       SAA   0               % BREAK ON ALL CHARS
       MON   4
       MON   143
       LDX   TNOPAR
       STT   ,X
       LDX   TNPAR2
       STT   ,X
       LDA   (TNOPAR
       MON   36              % NOWT IST[LLET F\R TNOWAI... JU
ILOP1, LDT   (70016          % XFPST BONE XFWAK
       LDA I (PORT           % OPEN XMSG PORT #
       MON   200             % XMSG CALL
       COPY  ST DA           % MESSAGE TYPE
       JAN   IQ1             % XMSG ERROR: PORT EJ \PPNAD (CPLR = 0)
       JAZ   IQ1             % NO MESSAGE
% MESSAGE RECIEVED, MOT HKOLL:
       LDX I (L2INT          % ADDRESS I HUVUDPROGRAMMET D[R HAPPEN BEHANDLAS
       JMP   ,X              % OCH TILLBAKA TILL CONT
IQ1,   SAT   1
       MON   66              % ISIZE
       MON   64
       JAF   IQ2
       LDA   (WTPAR          % PAR TILL TMOUT
       MON   267             % TMOUT
       JAZ   ILOP1           % DEFINED TIME ELAPSED
       SAT   1               % OM INTE: KOLLA OM TANGENT TRYCKT
IQ2,   MON   1
       JMP   ILOP1           % MESSAGE INTERRUPT (ERR 3, EOF)
% TECKEN HAR SKRIVITS:
       AND   (177            % SKIPPA H\G BIT
       LDT   IBUF            % SPARA TECKNET OSV..
       LDX   CPOS
       SBYT
       AAA   -1              % ^A
       JAZ   IDELT
       AAA   -7              % ^H
       JAZ   IDELT
       AAA   -3              % ^K
       JAZ   IADEL
       AAA   -2              % ^M
       JAZ   NOMOR
       AAA   -162            % DEL
       JAZ   IDELT
       LBYT
       AAA   -40
       JAN   INXT
       LDA   CPOS
       AAA   -116
       JAZ   INXT
       MIN   CPOS
       LBYT
       SAT   1
       MON   2
       MON   65
INXT,  JMP I (ILOP1
IADEL, LDA   CPOS
       JAZ   INXT
       LDX   (BSTP
       MON   32
       AAA   -1
       STA   CPOS
       JMP   IADEL
IDELT, LDX   CPOS
       JXZ   INXT
       AAX   -1
       STX   CPOS
       LDX   (BSTP
       MON   32
       JMP   INXT
NOMOR, SAA   47
       SBYT
       JPL I (REST
       LDA   (TNPAR2         % TILL TNOWAI
       MON   307             % TNOWAI
       LDX   CPOS
       LDA   TEBAK
       COPY  SA DP
&
QQ,    0
RDROM:
RDPLR:
WTROM:
WTPLR:
RDATA:
WDATA:
RLINE:
WLINE:
RITEM:
WITEM:
INBAZ:
CMPST:
MOVST:
ADDPL:
REMPL:
LDIR:
AHAPP:
RHAPP:
LF:
DROPL:
PSWIN:
CLINE:
INPUT:
CONT:
ADDL:
SUBL:
PRIDE:
PRIFP:
XINIT:
COMP:
GETNA:
QQ:
@
